//
// Created by zhku666 on 25-2-24.
//
#include <stdio.h>
#include <string.h>

// 定义User结构体
typedef struct {
    char username[100];
    char password[100];
} User;

// 输入用户详情并校验的函数
//TODO 密码不能密文存储，可采用异或/MD5加密算法
void login() {
    User user; // 直接在栈上分配，无需动态内存分配
    const char *filename = "users.txt"; // 存储用户名和密码的文件

    while (true) {
        // 输入用户名和密码
        printf("请输入用户名: ");
        scanf("%s", user.username);

        printf("请输入密码: ");
        scanf("%s", user.password);

        // 打开文件并校验用户名和密码
        FILE *file = fopen(filename, "r");
        if (file == NULL) {
            perror("无法打开文件");
            return; // 文件打开失败，退出函数
        }

        char line[200];
        int loginSuccess = 0; // 标记是否登录成功

        // 逐行读取文件
        while (fgets(line, sizeof(line), file)) {
            // 去掉换行符
            line[strcspn(line, "\n")] = '\0';

            // 解析每行数据
            char stored_username[100];
            char stored_password[100];
            sscanf(line, "%[^:]:%s", stored_username, stored_password);

            // 比较输入的用户名和密码
            if (strcmp(user.username, stored_username) == 0 && strcmp(user.password, stored_password) == 0) {
                loginSuccess = 1; // 标记登录成功
                break;
            }
        }

        fclose(file); // 关闭文件

        // 检查是否登录成功
        if (loginSuccess) {
            printf("登录成功！\n");
            break; // 退出循环
        } else {
            printf("账号或密码错误！\n");
        }
    }
}